package com.knowledge.review.designPatterns.creatormode.prototypepattern;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author XFW
 * @date 2024/5/6 16:34
 * @Description 原型模式~示例
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student implements Cloneable {
    private String name;
    private String sex;
    private Integer age;
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }


    public static void main(String[] args) throws Exception{
        Student stu1 = new Student("张三", "男", 18);
        Student stu2 = (Student)stu1.clone();
        stu2.setName("李四");
        System.out.println(stu1);// Student(name=张三, sex=男, age=18)
        /*
         * 可以看到，把一个学生复制过来，只是改了姓名而已，其他属性完全一样没有改变，
         * 需要注意的是，一定要在被拷贝的对象上实现Cloneable接口，否则会抛出
         * CloneNotSupportedException异常。
         */
        System.out.println(stu2);// Student(name=李四, sex=男, age=18)
    }
}